package artesis.sysanalyse.abstracteKlasses;

import artesis.sysanalyse.klasses.Optreden;

/**
 * Een abstracte klasse om een plaats te beschrijven (supertype)
 * 
 * @author Ruben Van Laerhoven
 * @since 2011 05 10
 * @version 2011 05 10
 */
public abstract class Plaats {
    
    public static int plaatsIdGenerator = 0;
    
    public Plaats(Optreden optreden) {
        _plaatsId = plaatsIdGenerator++;
        _reservatieId = 0;
        _optreden = optreden;
    }
    
    public abstract void beeindigen();

    public int get_reservatieId() {
        return _reservatieId;
    }

    public void set_reservatieId(int reservatieId)
            throws IllegalArgumentException {
        if (reservatieId >= 0) {
            this._reservatieId = reservatieId;
            _optreden.controleReservaties();
        }
        else {
            throw new IllegalArgumentException("Id moet groter dan 0 zijn...");
        }
    }
    
    public int get_plaatsId() {
        return _plaatsId;
    }

    // niet de bedoeling dat de plaatsId nog veranderd wordt!
    private void set_plaatsId(int _plaatsId) {
        this._plaatsId = _plaatsId;
    }
    
    public Optreden get_optreden() {
        return _optreden;
    }
        
    private int _plaatsId;
    private int _reservatieId;
    private Optreden _optreden;
}
